home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -serious- / programming / other / tandem / teaching / 24.asm < prev    next >
Assembly Source File  |  1999-09-06  |  7KB  |  169 lines

  1. * 24.asm    Program to demonstrate tandem.library    version 0.00  1.9.97
  2.  
  3.  include 'Front.i'        ;*** change to Tandem.i to step thru TL's ***
  4.  
  5. ; If you were assembling a program for actual use, you would assemble
  6. ; it with Front.i, not Tandem.i. To step through Tandem.i routines:
  7. ; 1. when you come to  jsr TLxxx(a6), place a breakpoint at TLxxx
  8. ; 2. then press run. This will stop at your breakpoint.
  9. ; 3. step through the TLxxx to see how it works.
  10. ; 4. the TLxxx will finally rts back to the mcline after the jsr in step 1
  11. ; 5. But, if you simply single step any jsr, tandem will step right
  12. ;    through it in 1 step (hence the need for steps 1-4 to step through it)
  13.  
  14. ; The program below conducts a conversation through the CLI window. If you
  15. ; were to run it through the workbench, Front.i would open a CLI-like
  16. ; monitor window, so the program would work just the same. The program
  17. ; uses MACRO calls. The program shows how you can use TL routines to do some
  18. ; basic tasks, and illustrates a primitive user interface via the CLI
  19. ; window.
  20.  
  21. * message strings
  22. strings: dc.b 0
  23.  dc.b $0C,'Hello, CLI window',0 ;1
  24.  dc.b 'RAM:Temp',0 ;2
  25.  dc.b 'Out of memory: no public memory',0 ;3
  26.  dc.b 'Out of memory: no chip memory',0 ;4
  27.  dc.b 'Everything worked ok',0 ;5
  28.  dc.b 'Input an unsigned integer (less than 2 billion)',0 ;6
  29.  dc.b '(All done: Press <Return> to acknowledge)',0 ;7
  30.  dc.b 'Read/Write error',0 ;8
  31.  dc.b 'You input:',0 ;9
  32.  dc.b '10,000 bytes of public mem created OK.',0 ;10
  33.  dc.b 'Now, I''ll save string 12 to RAM:Temp, The MACROs are:',0 ;11
  34.  dc.b 'This is string 12 (34 bytes long)',0 ;12
  35.  dc.b '  TLstrbuf #2        (tfr string 2, i.e. ''RAM:Temp'', to buff)',0
  36.  dc.b '  TLopenwrite        (open RAM:Temp)',0 ;14
  37.  dc.b '  TLstra0 #12        (point a0 to string 12)',0 ;15
  38.  dc.b '  TLwritefile a0,#34 (write 34 bytes [= len of string 12] to file)',0
  39.  dc.b '  TLclosefile        (close file)',0 ;17
  40.  dc.b 'Now, I''ll read RAM:Temp back in back again. The MACROs are:',0 ;18
  41.  dc.b '  TLstrbuf #2        (tfr string 2, i.e. ''RAM:Temp'', to buff)',0
  42.  dc.b '  TLopenread         (open RAM:Temp)',0 ;20
  43.  dc.b '  TLreadfile a4,#76  (read up to 76 bytes to buff)',0 ;21
  44.  dc.b '  TLclosefile        (close file)',0 ;22
  45.  dc.b '  TLoutput           (send string 12 to CLI)',0 ;23
  46.  dc.b 'Now, I''ll get a message from you. The MACROs are:',0 ;24
  47.  dc.b '  TLoutstr #6        (prompt)',0 ;25
  48.  dc.b '  TLinput            (get input from user)',0 ;26
  49.  dc.b '  TLaschex a4        (get hex of number in buff to d0)',0 ;27
  50.  dc.b '  move.l d0,-(a7)    (save d0)',0 ;28
  51.  dc.b '  TLoutstr #9        (send string 9)',0 ;29
  52.  dc.b '  TLhexasc (a7)+,a4  (convert input back to ascii in buff)',0 ;30
  53.  dc.b '  clr.b (a0)         (delimit number)',0 ;31
  54.  dc.b '  TLoutput           (echo number back to CLI window)',0 ;32
  55.  dc.b '(Press <Return> to acknowledge)',$0A,0 ;33
  56.  dc.b '10,000 bytes of chip mem created OK.',0 ;34
  57.  dc.b 'RAM:Temp read & printed - string 12 s/be above this line.',0 ;35
  58.  dc.b 0 ;36
  59.  dc.b 'Now, I''ll issue the MACRO:   TLpublic 10000',0 ;37
  60.  dc.b 'Now, I''ll issue the MACRO:   TLchip 10000',0 ;38
  61.  dc.b 'RAM:Temp now created.',0 ;39
  62.  
  63.  ds.w 0
  64.  
  65. * memory pointers
  66. pubmem: ds.l 1             ;pointer to 10000 bytes of public memory here
  67. chipmem: ds.l 1            ;pointer to 10000 bytes of chip memory here
  68.  
  69. * program entry point - called by Front0.i with A4 pointing to xxp_tndm
  70. Program:
  71.  
  72.  TLoutstr #1               ;* greetings
  73.  TLoutstr #36
  74.  
  75.  TLoutstr #37              ;* will create 10000 publilc
  76.  TLpublic #10000           ;create 10000 bytes of public mem
  77.  move.l d0,pubmem          ;remember where
  78.  beq Pr_bad1               ;go if out of public mem
  79.  TLoutstr #10              ;success
  80.  TLoutstr #36
  81.  
  82.  TLoutstr #38              ;* success, will create 10000 chip
  83.  TLchip #10000             ;create 10000 bytes of chip mem   } Front.i
  84.  move.l d0,chipmem         ;remember where                   } does so
  85.  beq Pr_bad2               ;go if out of chip mem            } automaitcally
  86.  TLoutstr #34              ;success
  87.  TLoutstr #36
  88.  
  89.  TLoutstr #33              ;* wait for acknowledge
  90.  TLinput
  91.  
  92.  TLoutstr #11              ;* will create RAM:Temp
  93.  TLoutstr #13
  94.  TLoutstr #14
  95.  TLoutstr #15
  96.  TLoutstr #16
  97.  TLoutstr #17
  98.  TLstrbuf #2               ;tfr 'RAM:Temp' to buff
  99.  TLopenwrite               ;open RAM:Temp for writing
  100.  beq Pr_bad3               ;go if can't
  101.  TLstra0 #12               ;point a0 to string 12
  102.  TLwritefile a0,#34        ;write 33 bytes (= len of string 12)
  103.  beq Pr_bad3               ;go if can't (TLwritefile closes file if bad)
  104.  TLclosefile               ;close the file.  RAM:Temp now exists
  105.  TLoutstr #39              ;success
  106.  TLoutstr #36
  107.  
  108.  TLoutstr #18              ;* will read RAM:Temp
  109.  TLoutstr #19
  110.  TLoutstr #20
  111.  TLoutstr #21
  112.  TLoutstr #22
  113.  TLoutstr #23
  114.  TLstrbuf #2               ;tfr 'RAM:Temp' to buff
  115.  TLopenread                ;open RAM:Temp for reading
  116.  beq Pr_bad3               ;go if can't
  117.  TLreadfile a4,#76         ;read it back into buff (should read 33 bytes)
  118.  beq Pr_bad3               ;go if can't (TLreadfile closes file if bad))
  119.  TLclosefile               ;close the file; string 12 s/be at start of buff
  120.  TLoutput                  ;send string 12 (as saved and read) to CLI window
  121.  TLoutstr #35              ;success
  122.  TLoutstr #36
  123.  
  124.  TLoutstr #33              ;* wait for acknowledge
  125.  TLinput
  126.  
  127.  TLoutstr #24              ;* will get input
  128.  TLoutstr #25
  129.  TLoutstr #26
  130.  TLoutstr #27
  131.  TLoutstr #28
  132.  TLoutstr #29
  133.  TLoutstr #30
  134.  TLoutstr #31
  135.  TLoutstr #32
  136.  TLoutstr #33
  137.  TLoutstr #6               ;send string 6 to CLI window
  138.  TLinput                   ;get user response
  139.  
  140.  TLaschex a4               ;get hex of number in buff to d0
  141.  move.l d0,-(a7)           ;save d0
  142.  TLoutstr #9               ;send string 9
  143.  move.l (a7)+,d0           ;get num that was input
  144.  TLhexasc d0,a4            ;convert d0 back to ascii in buff
  145.  clr.b (a0)                ;delimit number (TLHexasc points A0 past)
  146.  TLoutput                  ;echo number back to CLI window
  147.  bra.s Pr_good             ;go wrap up
  148.  
  149. Pr_bad1:
  150.  moveq #3,d0               ;error message - string 3
  151.  bra.s Pr_quit
  152.  
  153. Pr_bad2:
  154.  moveq #4,d0               ;error message - string 4
  155.  bra.s Pr_quit
  156.  
  157. Pr_bad3:
  158.  moveq #8,d0               ;error message - string 8
  159.  bra.s Pr_quit
  160.  
  161. Pr_good:
  162.  moveq #5,d0               ;ok message - string 5
  163.  
  164. Pr_quit:
  165.  TLoutstr d0               ;send closing message
  166.  TLoutstr #7               ;ask for acknowledge
  167.  TLinput                   ;wait for closing message
  168.  rts                       ;back to Front.i to close down
  169.